package br.com.cicero.notasfiscais.mb;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.validation.ValidationException;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.chart.PieChartModel;

import br.com.cicero.notasfiscais.dao.DAO;
import br.com.cicero.notasfiscais.datamodel.DataModelProdutos;
import br.com.cicero.notasfiscais.modelo.Produto;
import br.com.cicero.notasfiscais.modelo.QuantidadePorProduto;

@ManagedBean
@ViewScoped
public class ProdutoBean implements Serializable {
	
	private Produto produto = new Produto();
	private List<Produto> produtos;
	private LazyDataModel<Produto> dataModel;
	private PieChartModel model;
	
	public ProdutoBean() {
		
		this.dataModel = new DataModelProdutos();
		this.model = new PieChartModel();
		
		DAO<Produto> produtoDao = new DAO<Produto>(Produto.class);
		this.dataModel.setRowCount(produtoDao.contaTodas());
		this.dataModel.setPageSize(5);
		
		relatorioQuantidadePorProduto();
		
	}
		
	private void relatorioQuantidadePorProduto() {
		
		DAO<Produto> produtoDao = new DAO<Produto>(Produto.class);
				
		for (QuantidadePorProduto quantidadePorProduto : produtoDao.relatorioQuantidadePorProduto()) {
			
			this.model.set(quantidadePorProduto.getProduto().getNome(), quantidadePorProduto.getQuantidade());
			
		}
				
	}
	
	public String grava() {
				
		DAO<Produto> produtoDao = new DAO<Produto>(Produto.class);
		
		if (this.produto.getId() == null) {
			
			produtoDao.adiciona(produto);
			
		} else {
			
			produtoDao.atualiza(produto);
			
		}
		
		this.produto = new Produto();
		this.produtos = produtoDao.listaTodos();
		
		return "produto?faces-redirect=true";
		
		
	}
		
	public List<Produto> getProdutos() {
		
		if (this.produtos == null) {
			
			System.out.println("Carregando produtos...");
			this.produtos = new DAO<Produto>(Produto.class).listaTodos();
			
		}
		
		return this.produtos;
	}
	
	public void remove(Produto produto) {
		
		DAO<Produto> produtoDao = new DAO<Produto>(Produto.class);
		
		produtoDao.remove(produto);
		this.produtos = produtoDao.listaTodos();
				
	}
		
	public void cancela() {
		
		this.produto = new Produto();
		
	}
	
	public Produto getProduto() {
		return produto;
	}
	
	public void setProduto(Produto produto) {
		this.produto = produto;
	}
	
	public LazyDataModel<Produto> getDataModel() {
		return dataModel;
	}
	
	public PieChartModel getModel() {
		return model;
	}

}
